﻿#ifndef _TRUETYPEFONT_H_
#define _TRUETYPEFONT_H_

#pragma once

#include <string>
#include <stdint.h>

#include <ft2build.h>
#include FT_FREETYPE_H
#include FT_GLYPH_H

using namespace std;

class TrueTypeFont
{
public:
	TrueTypeFont(std::string font_file);
	~TrueTypeFont();

public:
	enum Status
	{
		Font_OK = 0,
		Font_NoInput,
		FontFileNoFoundOrIllegal,
		FontCharNoFound,
	};

	typedef struct tagBitmapInfo
	{
		char16_t unicode;
		char utf8[4];
		int real_w;     //位图真实宽度
		int w;          //lvgl位图宽度，必为偶数
		int h;
		int bpp;        //与_bpp相等
		int line_byte;  //一行的字节数
	}BitmapInfo;

	uint8_t *GetBitmap(char16_t ch, BitmapInfo &info);

	void SetBpp(int bpp);
	void SetFontSize(int fontSize) { _fontSize = fontSize; }

	//字体加粗，还未实现
	void SetBold(bool en) { _bold = en; }
	string &GetFontName(void) { return fontName; }
	Status GetStatus(void) { return status; }
	int GetFontSize(void) { return _fontSize; }
	int GetBpp(void) { return _bpp; }
	const FT_Glyph_Metrics &GetGlyph(void) const { return _slot->metrics; }

	static int UnicodeToUTF8(char *dest, const char16_t *src, int bufflen);
	static int UTF8ToUnicode(char16_t *dest, const char *src, int bufflen);



private:
    FT_Library _library; /* 库 */
    FT_Face _face;       /* 字体文件对象 */
    FT_Vector _pen;      /* 矢量字体的原点  */
    FT_Error _error;     /* 错误码 */
    FT_GlyphSlot _slot;  /* glyph插槽 */
    FT_Matrix _matrix;   /* 矩阵，通过矩阵转置实现字体旋转 */

    string fontName;        // 字库的名称
    int _fontSize; // 字体高度(pixel)
    double _angle; /* 旋转的角度 */
    bool _bold;    // 加粗
	int _bpp;		//每个像素bit数
    Status status;


};

#endif
